package org.aiforum.web.intercept;

import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

import org.aiforum.frountend.common.CacheContext;
import org.aiforum.frountend.common.CookieHelper;
import org.aiforum.frountend.common.Responsehelper;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

/**
 * 登录认证拦截器,实现struts2的Interceptor接口
 * @author VIC
 *
 */
public class LoginAuthIntercept implements Interceptor {
	
	private static final long serialVersionUID = 1L;

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		
		// 获取请求的Action名称
		String actionName = invocation.getProxy().getActionName();
		// 用户的注册和登录请求不需要登录认证
		if(actionName.equals("user_register") || actionName.equals("user_login")){
			return invocation.invoke();
		}
		// 从请求中获取登录写回的token
		Object token = CookieHelper.getCookie("token", ServletActionContext.getRequest());
		// 如果tokan不为空表示用户已经登录
		if(null != token){
			// 获取登录用户信息
			Object loginUser = CacheContext.getCache(token.toString(), Object.class);
			// 如果用户登录信息有效则继续执行请求
			if(null != loginUser){
				return invocation.invoke();
			}
		}
		// 如果token为空则表示用户没有登录,则重定向到登录页
		Responsehelper.print("login",ServletActionContext.getResponse());
		return null;
	}
	
	@Override
	public void destroy() {
		
	}

	@Override
	public void init() {
		
	}
	
}
